library(Seurat)
library(Matrix)
library(dplyr)
library(RColorBrewer)
library(ggplot2)
library(ggExtra)
library(cowplot)
library(reticulate)
library(wesanderson)
library(princurve)
use_python("/usr/bin/python3")
#Set ggplot theme as classic
theme_set(theme_classic())Countdata <- Read10X("../../RawData/Gmnc_KO/outs/filtered_feature_bc_matrix/")
Raw.data <- CreateSeuratObject(counts = Countdata,
project = "Gmnc_KO",
min.cells = 3,
min.features = 800)
Raw.data$Barcodes <- rownames(Raw.data@meta.data)
rm(Countdata)
dim(Raw.data)## [1] 21077 16272
Raw.data$percent.mito <- PercentageFeatureSet(Raw.data, pattern = "^mt-")
Raw.data$percent.ribo <- PercentageFeatureSet(Raw.data, pattern = "(^Rpl|^Rps|^Mrp)")VlnPlot(object = Raw.data, features = c("nFeature_RNA","nCount_RNA", "percent.mito", "percent.ribo"), ncol= 2) & NoAxes() # Inspect cell based on relation between nUMI and nGene detected
# Relation between nUMI and nGene detected
Cell.QC.Stat <- Raw.data@meta.data
p1 <- ggplot(Cell.QC.Stat, aes(x=nCount_RNA, y=nFeature_RNA)) + geom_point() + geom_smooth(method="lm")
p1 <- ggMarginal(p1, type = "histogram", fill="lightgrey")
p2 <- ggplot(Cell.QC.Stat, aes(x=log10(nCount_RNA), y=log10(nFeature_RNA))) + geom_point() + geom_smooth(method="lm")
p2 <- ggMarginal(p2, type = "histogram", fill="lightgrey")
plot_grid(plotlist = list(p1,p2), ncol=2, align='h', rel_widths = c(1, 1)) ; rm(p1,p2)Cells with deviating nGene/nUMI ratio display an Erythrocyte signature
Raw.data <- AddModuleScore(Raw.data,
features = list(c("Hbb-bt", "Hbq1a", "Isg20", "Fech", "Snca", "Rec114")),
ctrl = 10,
name = "Erythrocyte.signature")
Cell.QC.Stat$Erythrocyte.signature <- Raw.data$Erythrocyte.signature1gradient <- colorRampPalette(brewer.pal(n =11, name = "Spectral"))(100)
p1 <- ggplot(Cell.QC.Stat, aes(log10(nCount_RNA), y=log10(nFeature_RNA))) +
geom_point(aes(color= Erythrocyte.signature)) +
scale_color_gradientn(colours=rev(gradient), name='Erythrocyte score') + theme(legend.position="none")
p2 <- ggplot(Cell.QC.Stat, aes(log10(nCount_RNA), y=log10(nFeature_RNA))) +
geom_point(aes(color= percent.mito)) +
scale_color_gradientn(colours=rev(gradient), name='Percent mito') + theme(legend.position="none")
p3 <- ggplot(Cell.QC.Stat, aes(log10(nCount_RNA), y=log10(nFeature_RNA))) +
geom_point(aes(color= percent.ribo)) +
scale_color_gradientn(colours=rev(gradient), name='Percent ribo') + theme(legend.position="none")
p1 + p2 + p3 ## Exclude Erythrocytes
Cell.QC.Stat$Erythrocyte <- ifelse(Cell.QC.Stat$Erythrocyte.signature > 0.1, "Erythrocyte", "Not_Erythrocyte")p2 <- ggplot(Cell.QC.Stat, aes(x=log10(nCount_RNA), y=log10(nFeature_RNA))) +
geom_point(aes(colour = Erythrocyte)) +
theme(legend.position="none")
ggMarginal(p2, type = "histogram", fill="lightgrey")# Filter cells based on these thresholds
Cell.QC.Stat <- Cell.QC.Stat %>% filter(Cell.QC.Stat$Erythrocyte.signature < 0.1)We applied a high and low median absolute deviation (mad) thresholds to exclude outlier cells
max.mito.thr <- median(Cell.QC.Stat$percent.mito) + 3*mad(Cell.QC.Stat$percent.mito)
min.mito.thr <- median(Cell.QC.Stat$percent.mito) - 3*mad(Cell.QC.Stat$percent.mito)p1 <- ggplot(Cell.QC.Stat, aes(x=nFeature_RNA, y=percent.mito)) +
geom_point() +
geom_hline(aes(yintercept = max.mito.thr), colour = "red", linetype = 2) +
geom_hline(aes(yintercept = min.mito.thr), colour = "red", linetype = 2) +
annotate(geom = "text", label = paste0(as.numeric(table(Cell.QC.Stat$percent.mito > max.mito.thr | Cell.QC.Stat$percent.mito < min.mito.thr)[2])," cells removed\n",
as.numeric(table(Cell.QC.Stat$percent.mito > max.mito.thr | Cell.QC.Stat$percent.mito < min.mito.thr)[1])," cells remain"),
x = 6000, y = 20)
ggMarginal(p1, type = "histogram", fill="lightgrey", bins=100) # Filter cells based on these thresholds
Cell.QC.Stat <- Cell.QC.Stat %>% filter(percent.mito < max.mito.thr) %>% filter(percent.mito > min.mito.thr)We filter cells which are likely to be doublet based on their higher content of transcript detected as well as cell with to few genes/UMI sequenced
# Set low and hight thresholds on the number of detected genes based on the one obtain with the WT dataset
min.Genes.thr <- log10(1635)
max.Genes.thr <- log10(8069)
# Set hight threshold on the number of transcripts
max.nUMI.thr <- log10(58958)# Gene/UMI scatter plot before filtering
p1 <- ggplot(Cell.QC.Stat, aes(x=log10(nCount_RNA), y=log10(nFeature_RNA))) +
geom_point() +
geom_smooth(method="lm") +
geom_hline(aes(yintercept = min.Genes.thr), colour = "green", linetype = 2) +
geom_hline(aes(yintercept = max.Genes.thr), colour = "green", linetype = 2) +
geom_vline(aes(xintercept = max.nUMI.thr), colour = "red", linetype = 2)
ggMarginal(p1, type = "histogram", fill="lightgrey")# Filter cells base on both metrics
Cell.QC.Stat <- Cell.QC.Stat %>% filter(log10(nFeature_RNA) > min.Genes.thr) %>% filter(log10(nCount_RNA) < max.nUMI.thr)lm.model <- lm(data = Cell.QC.Stat, formula = log10(nFeature_RNA) ~ log10(nCount_RNA))
p2 <- ggplot(Cell.QC.Stat, aes(x=log10(nCount_RNA), y=log10(nFeature_RNA))) +
geom_point() +
geom_smooth(method="lm") +
geom_hline(aes(yintercept = min.Genes.thr), colour = "green", linetype = 2) +
geom_hline(aes(yintercept = max.Genes.thr), colour = "green", linetype = 2) +
geom_vline(aes(xintercept = max.nUMI.thr), colour = "red", linetype = 2) +
annotate(geom = "text", label = paste0(dim(Cell.QC.Stat)[1], " QC passed cells"), x = 4, y = 3.8)
ggMarginal(p2, type = "histogram", fill="lightgrey") ## Filter the Seurat object
Raw.data <- subset(x = Raw.data, subset = Barcodes %in% Cell.QC.Stat$Barcodes)# Plot final QC metrics
VlnPlot(object = Raw.data, features = c("nFeature_RNA","nCount_RNA", "percent.mito", "percent.ribo"), ncol= 2) & NoAxes()p1 <- ggplot(Raw.data@meta.data, aes(x=log10(nCount_RNA), y=log10(nFeature_RNA))) + geom_point() + geom_smooth(method="lm")
ggMarginal(p1, type = "histogram", fill="lightgrey")rm(list = ls()[!ls() %in% "Raw.data"])Export raw count matrix as input to Scrublet
#Export filtered matrix
dir.create("../../RawData/Gmnc_KO/Scrublet_inputs")
exprData <- Matrix(as.matrix(Raw.data@assays[["RNA"]]@counts), sparse = TRUE)
writeMM(exprData, "../../RawData/Gmnc_KO/Scrublet_inputs/matrix1.mtx")## NULL
import scrublet as scr
import scipy.io
import numpy as np
import os
#Load raw counts matrix and gene list
input_dir = '../../RawData/Gmnc_KO/Scrublet_inputs'
counts_matrix = scipy.io.mmread(input_dir + '/matrix1.mtx').T.tocsc()
#Initialize Scrublet
scrub = scr.Scrublet(counts_matrix,
expected_doublet_rate=0.1,
sim_doublet_ratio=2,
n_neighbors = 8)
#Run the default pipeline
doublet_scores, predicted_doublets = scrub.scrub_doublets(min_counts=1,
min_cells=3,
min_gene_variability_pctl=85,
n_prin_comps=25)## Preprocessing...
## Simulating doublets...
## Embedding transcriptomes using PCA...
## Calculating doublet scores...
## Automatically set threshold at doublet score = 0.35
## Detected doublet rate = 3.7%
## Estimated detectable doublet fraction = 26.0%
## Overall doublet rate:
## Expected = 10.0%
## Estimated = 14.2%
## Elapsed time: 21.3 seconds
# Import scrublet's doublet score
Raw.data$Doubletscore <- py$doublet_scores
# Plot doublet score
ggplot(Raw.data@meta.data, aes(x = Doubletscore, stat(ndensity))) +
geom_histogram(bins = 200, colour ="lightgrey")+
geom_vline(xintercept = 0.15, colour = "red", linetype = 2)# Manually set threshold at doublet score to 0.2
Raw.data$Predicted_doublets <- ifelse(py$doublet_scores > 0.15, "Doublet","Singlet")
table(Raw.data$Predicted_doublets)##
## Doublet Singlet
## 2273 10215
Raw.data <- subset(x = Raw.data, subset = Predicted_doublets == "Singlet")dir.create("./SpringCoordinates")# Export raw expression matrix and gene list to regenerate a spring plot
exprData <- Matrix(as.matrix(Raw.data@assays[["RNA"]]@counts), sparse = TRUE)
writeMM(exprData, "./SpringCoordinates/ExprData.mtx")## NULL
Genelist <- row.names(Raw.data@assays[["RNA"]]@counts)
write.table(Genelist, "./SpringCoordinates/Genelist.csv", sep="\t", col.names = F, row.names = F, quote = F)#Export metadata
Scrublet <- c("Scrublet", Raw.data$Predicted_doublets)
Scrublet <- paste(Scrublet, sep=",", collapse=",")
Cellgrouping <- Scrublet
write.table(Cellgrouping, "./SpringCoordinates/Cellgrouping.csv", quote =F, row.names = F, col.names = F)spring.coor <- read.table("SpringCoordinates/coordinates.txt", sep = ",", header = F, row.names = 1)
colnames(spring.coor) <- c("Spring_1", "Spring_2")Spring.Sym <- function(x){
x = abs(max(spring.coor$Spring_2)-x)
}
spring.coor$Spring_2 <- sapply(spring.coor$Spring_2, function(x) Spring.Sym(x))Raw.data$Spring_1 <- spring.coor$Spring_1
Raw.data$Spring_2 <- spring.coor$Spring_2spring <- as.matrix(Raw.data@meta.data %>% select("Spring_1", "Spring_2"))
Raw.data[["spring"]] <- CreateDimReducObject(embeddings = spring, key = "Spring_", assay = DefaultAssay(Raw.data))DimPlot(Raw.data,
reduction = "spring",
pt.size = 0.5) & NoAxes() # Sctransform normalization
Raw.data <- SCTransform(Raw.data,
method = "glmGamPoi",
vars.to.regress = c("percent.mito"),
verbose = T)##
|
| | 0%
|
|================== | 25%
|
|=================================== | 50%
|
|==================================================== | 75%
|
|======================================================================| 100%
##
|
| | 0%
|
|== | 3%
|
|==== | 5%
|
|===== | 8%
|
|======= | 10%
|
|========= | 13%
|
|=========== | 15%
|
|============= | 18%
|
|============== | 21%
|
|================ | 23%
|
|================== | 26%
|
|==================== | 28%
|
|====================== | 31%
|
|======================= | 33%
|
|========================= | 36%
|
|=========================== | 38%
|
|============================= | 41%
|
|=============================== | 44%
|
|================================ | 46%
|
|================================== | 49%
|
|==================================== | 51%
|
|====================================== | 54%
|
|======================================= | 56%
|
|========================================= | 59%
|
|=========================================== | 62%
|
|============================================= | 64%
|
|=============================================== | 67%
|
|================================================ | 69%
|
|================================================== | 72%
|
|==================================================== | 74%
|
|====================================================== | 77%
|
|======================================================== | 79%
|
|========================================================= | 82%
|
|=========================================================== | 85%
|
|============================================================= | 87%
|
|=============================================================== | 90%
|
|================================================================= | 92%
|
|================================================================== | 95%
|
|==================================================================== | 97%
|
|======================================================================| 100%
##
|
| | 0%
|
|== | 3%
|
|==== | 5%
|
|===== | 8%
|
|======= | 10%
|
|========= | 13%
|
|=========== | 15%
|
|============= | 18%
|
|============== | 21%
|
|================ | 23%
|
|================== | 26%
|
|==================== | 28%
|
|====================== | 31%
|
|======================= | 33%
|
|========================= | 36%
|
|=========================== | 38%
|
|============================= | 41%
|
|=============================== | 44%
|
|================================ | 46%
|
|================================== | 49%
|
|==================================== | 51%
|
|====================================== | 54%
|
|======================================= | 56%
|
|========================================= | 59%
|
|=========================================== | 62%
|
|============================================= | 64%
|
|=============================================== | 67%
|
|================================================ | 69%
|
|================================================== | 72%
|
|==================================================== | 74%
|
|====================================================== | 77%
|
|======================================================== | 79%
|
|========================================================= | 82%
|
|=========================================================== | 85%
|
|============================================================= | 87%
|
|=============================================================== | 90%
|
|================================================================= | 92%
|
|================================================================== | 95%
|
|==================================================================== | 97%
|
|======================================================================| 100%
Raw.data <- RunPCA(Raw.data, verbose = FALSE)
Raw.data <- FindNeighbors(Raw.data,
dims = 1:20,
k.param = 8)
Raw.data <- FindClusters(Raw.data, resolution = 0.2)## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 10215
## Number of edges: 218490
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.9335
## Number of communities: 9
## Elapsed time: 1 seconds
DimPlot(Raw.data,
reduction = "spring",
cols = c("#ebcb2e", "#9ec22f", "#a9961b", "#cc3a1b", "#d14c8d", "#4cabdc", "#5ab793", "#e7823a", "#046c9a", "#4990c9"),
pt.size = 0.5) & NoAxes()Raw.data$Broadclust.ident <- Raw.data$seurat_clustersNeurons.data <- subset(Raw.data, idents = 3)
DimPlot(Neurons.data,
reduction = "spring",
pt.size = 1,
cols = c("#cc3a1b")) + NoAxes() ## Fit pseudotime
fit <- principal_curve(as.matrix(Neurons.data@meta.data[,c("Spring_1", "Spring_2")]),
smoother='lowess',
trace=TRUE,
f = 1,
stretch=0)## Starting curve---distance^2: 84204082853
## Iteration 1---distance^2: 46039577
## Iteration 2---distance^2: 42955956
## Iteration 3---distance^2: 41286356
## Iteration 4---distance^2: 40749859
## Iteration 5---distance^2: 40679459
## Iteration 6---distance^2: 40714117
#Pseudotime score
PseudotimeScore <- fit$lambda/max(fit$lambda)
if (cor(PseudotimeScore, Neurons.data@assays$SCT@data['Hmga2', ]) > 0) {
Neurons.data$PseudotimeScore <- -(PseudotimeScore - max(PseudotimeScore))
}
cols <- brewer.pal(n =11, name = "Spectral")
ggplot(Neurons.data@meta.data, aes(Spring_1, Spring_2)) +
geom_point(aes(color=PseudotimeScore), size=2, shape=16) +
scale_color_gradientn(colours=rev(cols), name='Pseudotime score') ## Regress pseudotime and cluster cells into lineages
Neurons.data <- SCTransform(Neurons.data,
method = "glmGamPoi",
vars.to.regress = c("PseudotimeScore", "nFeature_RNA"),
verbose = T)##
|
| | 0%
|
|================== | 25%
|
|=================================== | 50%
|
|==================================================== | 75%
|
|======================================================================| 100%
##
|
| | 0%
|
|== | 3%
|
|===== | 7%
|
|======= | 10%
|
|========= | 13%
|
|============ | 17%
|
|============== | 20%
|
|================ | 23%
|
|=================== | 27%
|
|===================== | 30%
|
|======================= | 33%
|
|========================== | 37%
|
|============================ | 40%
|
|============================== | 43%
|
|================================= | 47%
|
|=================================== | 50%
|
|===================================== | 53%
|
|======================================== | 57%
|
|========================================== | 60%
|
|============================================ | 63%
|
|=============================================== | 67%
|
|================================================= | 70%
|
|=================================================== | 73%
|
|====================================================== | 77%
|
|======================================================== | 80%
|
|========================================================== | 83%
|
|============================================================= | 87%
|
|=============================================================== | 90%
|
|================================================================= | 93%
|
|==================================================================== | 97%
|
|======================================================================| 100%
##
|
| | 0%
|
|== | 3%
|
|===== | 7%
|
|======= | 10%
|
|========= | 13%
|
|============ | 17%
|
|============== | 20%
|
|================ | 23%
|
|=================== | 27%
|
|===================== | 30%
|
|======================= | 33%
|
|========================== | 37%
|
|============================ | 40%
|
|============================== | 43%
|
|================================= | 47%
|
|=================================== | 50%
|
|===================================== | 53%
|
|======================================== | 57%
|
|========================================== | 60%
|
|============================================ | 63%
|
|=============================================== | 67%
|
|================================================= | 70%
|
|=================================================== | 73%
|
|====================================================== | 77%
|
|======================================================== | 80%
|
|========================================================== | 83%
|
|============================================================= | 87%
|
|=============================================================== | 90%
|
|================================================================= | 93%
|
|==================================================================== | 97%
|
|======================================================================| 100%
We used on transcription factors expression profile to perform lineage clustering
TFs <- read.table("TF.csv", sep = ";")[,1]
Neurons.data <- RunPCA(Neurons.data,
features = TFs,
verbose = FALSE)Neurons.data <- FindNeighbors(Neurons.data,
dims = c(1:10),
k.param = 6)
Neurons.data <- FindClusters(Neurons.data, resolution = 0.2)## Modularity Optimizer version 1.3.0 by Ludo Waltman and Nees Jan van Eck
##
## Number of nodes: 1659
## Number of edges: 22850
##
## Running Louvain algorithm...
## Maximum modularity in 10 random starts: 0.8550
## Number of communities: 3
## Elapsed time: 0 seconds
DimPlot(Neurons.data,
reduction = "spring",
cols = c("#ebcb2e", "#9ec22f", "#a9961b", "#cc3a1b", "#d14c8d", "#4cabdc", "#5ab793", "#e7823a", "#046c9a", "#4990c9"),
pt.size = 0.5) & NoAxes()FeaturePlot(object = Neurons.data,
features = c("Foxg1", "Zfpm2",
"Lhx1", "Zic5", "Zfp503"),
pt.size = 0.2,
cols = c("grey90", brewer.pal(9,"YlGnBu")),
reduction = "spring",
order = T) & NoAxes() & NoLegend()Raw.data$Broadclust.ident <- sapply(Raw.data$Barcodes,
FUN = function(x) {
if (x %in% Neurons.data$Barcodes) {
x = paste0("Neuron_",Neurons.data@meta.data[x, "seurat_clusters"])
} else {
x = Raw.data@meta.data[x, "Broadclust.ident"]
}
})DimPlot(Raw.data,
reduction = "spring",
group.by = "Broadclust.ident",
cols = c("#ebcb2e", "#9ec22f", "#a9961b", "#cc3a1b", "#d14c8d", "#4cabdc", "#5ab793", "grey90", "#e7823a", "#046c9a", "#4990c9"),
pt.size = 0.5) & NoAxes()FeaturePlot(object = Raw.data,
features = c("Tbr1","Foxg1", "Trp73", "Htr2c",
"Shisa2", "Wif1", "Rassf4","Dkk3",
"Dlk1", "Sulf1", "Ttr", "Fgf8", "Fgf17",
"Foxc1", "C1qb"),
pt.size = 0.2,
cols = c("grey90", brewer.pal(9,"YlGnBu")),
reduction = "spring",
order = T) & NoAxes() & NoLegend()saveRDS(Raw.data, "./GmncKO.cells.RDS")#date
format(Sys.time(), "%d %B, %Y, %H,%M")## [1] "22 avril, 2022, 15,15"
#Packages used
sessionInfo()## R version 4.1.3 (2022-03-10)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04.4 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
## LAPACK: /home/matthieu/anaconda3/lib/libmkl_rt.so.1
##
## locale:
## [1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=fr_FR.UTF-8 LC_COLLATE=fr_FR.UTF-8
## [5] LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8
## [7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] princurve_2.1.6 wesanderson_0.3.6 reticulate_1.22 cowplot_1.1.1
## [5] ggExtra_0.9 ggplot2_3.3.5 RColorBrewer_1.1-2 dplyr_1.0.7
## [9] Matrix_1.4-1 SeuratObject_4.0.4 Seurat_4.0.5
##
## loaded via a namespace (and not attached):
## [1] Rtsne_0.15 colorspace_2.0-2
## [3] deldir_1.0-6 ellipsis_0.3.2
## [5] ggridges_0.5.3 XVector_0.34.0
## [7] GenomicRanges_1.46.1 spatstat.data_2.1-0
## [9] farver_2.1.0 leiden_0.3.9
## [11] listenv_0.8.0 ggrepel_0.9.1
## [13] fansi_0.5.0 sparseMatrixStats_1.6.0
## [15] codetools_0.2-18 splines_4.1.3
## [17] knitr_1.36 polyclip_1.10-0
## [19] jsonlite_1.7.2 ica_1.0-2
## [21] cluster_2.1.3 png_0.1-7
## [23] uwot_0.1.10 shiny_1.7.1
## [25] sctransform_0.3.2 spatstat.sparse_2.0-0
## [27] compiler_4.1.3 httr_1.4.2
## [29] assertthat_0.2.1 fastmap_1.1.0
## [31] lazyeval_0.2.2 later_1.3.0
## [33] htmltools_0.5.2 tools_4.1.3
## [35] igraph_1.2.11 GenomeInfoDbData_1.2.7
## [37] gtable_0.3.0 glue_1.5.1
## [39] RANN_2.6.1 reshape2_1.4.4
## [41] Rcpp_1.0.8 Biobase_2.54.0
## [43] scattermore_0.7 jquerylib_0.1.4
## [45] vctrs_0.3.8 nlme_3.1-153
## [47] DelayedMatrixStats_1.16.0 lmtest_0.9-39
## [49] xfun_0.28 stringr_1.4.0
## [51] globals_0.14.0 mime_0.12
## [53] miniUI_0.1.1.1 lifecycle_1.0.1
## [55] irlba_2.3.3 goftest_1.2-3
## [57] future_1.23.0 zlibbioc_1.40.0
## [59] MASS_7.3-56 zoo_1.8-9
## [61] scales_1.1.1 spatstat.core_2.3-1
## [63] MatrixGenerics_1.6.0 promises_1.2.0.1
## [65] spatstat.utils_2.2-0 SummarizedExperiment_1.24.0
## [67] parallel_4.1.3 yaml_2.2.1
## [69] pbapply_1.5-0 gridExtra_2.3
## [71] sass_0.4.0 rpart_4.1.16
## [73] stringi_1.7.6 highr_0.9
## [75] S4Vectors_0.32.3 BiocGenerics_0.40.0
## [77] GenomeInfoDb_1.30.0 bitops_1.0-7
## [79] rlang_0.4.12 pkgconfig_2.0.3
## [81] matrixStats_0.61.0 glmGamPoi_1.6.0
## [83] evaluate_0.14 lattice_0.20-45
## [85] ROCR_1.0-11 purrr_0.3.4
## [87] tensor_1.5 labeling_0.4.2
## [89] patchwork_1.1.1 htmlwidgets_1.5.4
## [91] tidyselect_1.1.1 parallelly_1.29.0
## [93] RcppAnnoy_0.0.19 plyr_1.8.6
## [95] magrittr_2.0.2 R6_2.5.1
## [97] IRanges_2.28.0 generics_0.1.1
## [99] DelayedArray_0.20.0 DBI_1.1.1
## [101] pillar_1.6.4 withr_2.4.3
## [103] mgcv_1.8-40 fitdistrplus_1.1-6
## [105] RCurl_1.98-1.5 survival_3.2-13
## [107] abind_1.4-5 tibble_3.1.6
## [109] future.apply_1.8.1 crayon_1.4.2
## [111] KernSmooth_2.23-20 utf8_1.2.2
## [113] spatstat.geom_2.3-0 plotly_4.10.0
## [115] rmarkdown_2.11 grid_4.1.3
## [117] data.table_1.14.2 digest_0.6.29
## [119] xtable_1.8-4 tidyr_1.1.4
## [121] httpuv_1.6.3 stats4_4.1.3
## [123] munsell_0.5.0 viridisLite_0.4.0
## [125] bslib_0.3.1
Institute of Psychiatry and Neuroscience of Paris, INSERM U1266, 75014, Paris, France, matthieu.moreau@inserm.fr↩︎